package org.xtext.tp4.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.xtext.tp4.services.MinigobstonesGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalMinigobstonesParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'procedure'", "'('", "')'", "'{'", "'}'", "'hayBolitas'", "'Poner'", "'Mover'", "'if'", "'else'", "'Oeste'", "'Este'", "'Norte'", "'Sur'", "'Negro'", "'Rojo'", "'Azul'", "'Verde'"
    };
    public static final int RULE_ID=4;
    public static final int T__28=28;
    public static final int T__27=27;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__19=19;
    public static final int RULE_STRING=6;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=5;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalMinigobstonesParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalMinigobstonesParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalMinigobstonesParser.tokenNames; }
    public String getGrammarFileName() { return "../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g"; }



     	private MinigobstonesGrammarAccess grammarAccess;
     	
        public InternalMinigobstonesParser(TokenStream input, MinigobstonesGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "InitStructure";	
       	}
       	
       	@Override
       	protected MinigobstonesGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleInitStructure"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:67:1: entryRuleInitStructure returns [EObject current=null] : iv_ruleInitStructure= ruleInitStructure EOF ;
    public final EObject entryRuleInitStructure() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInitStructure = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:68:2: (iv_ruleInitStructure= ruleInitStructure EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:69:2: iv_ruleInitStructure= ruleInitStructure EOF
            {
             newCompositeNode(grammarAccess.getInitStructureRule()); 
            pushFollow(FOLLOW_ruleInitStructure_in_entryRuleInitStructure75);
            iv_ruleInitStructure=ruleInitStructure();

            state._fsp--;

             current =iv_ruleInitStructure; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleInitStructure85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInitStructure"


    // $ANTLR start "ruleInitStructure"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:76:1: ruleInitStructure returns [EObject current=null] : ( (lv_definitions_0_0= ruleDefinition ) )* ;
    public final EObject ruleInitStructure() throws RecognitionException {
        EObject current = null;

        EObject lv_definitions_0_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:79:28: ( ( (lv_definitions_0_0= ruleDefinition ) )* )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:80:1: ( (lv_definitions_0_0= ruleDefinition ) )*
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:80:1: ( (lv_definitions_0_0= ruleDefinition ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==11) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:81:1: (lv_definitions_0_0= ruleDefinition )
            	    {
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:81:1: (lv_definitions_0_0= ruleDefinition )
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:82:3: lv_definitions_0_0= ruleDefinition
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getInitStructureAccess().getDefinitionsDefinitionParserRuleCall_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleDefinition_in_ruleInitStructure130);
            	    lv_definitions_0_0=ruleDefinition();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getInitStructureRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"definitions",
            	            		lv_definitions_0_0, 
            	            		"Definition");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInitStructure"


    // $ANTLR start "entryRuleDefinition"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:106:1: entryRuleDefinition returns [EObject current=null] : iv_ruleDefinition= ruleDefinition EOF ;
    public final EObject entryRuleDefinition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDefinition = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:107:2: (iv_ruleDefinition= ruleDefinition EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:108:2: iv_ruleDefinition= ruleDefinition EOF
            {
             newCompositeNode(grammarAccess.getDefinitionRule()); 
            pushFollow(FOLLOW_ruleDefinition_in_entryRuleDefinition166);
            iv_ruleDefinition=ruleDefinition();

            state._fsp--;

             current =iv_ruleDefinition; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinition176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDefinition"


    // $ANTLR start "ruleDefinition"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:115:1: ruleDefinition returns [EObject current=null] : this_ProcedureDef_0= ruleProcedureDef ;
    public final EObject ruleDefinition() throws RecognitionException {
        EObject current = null;

        EObject this_ProcedureDef_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:118:28: (this_ProcedureDef_0= ruleProcedureDef )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:120:5: this_ProcedureDef_0= ruleProcedureDef
            {
             
                    newCompositeNode(grammarAccess.getDefinitionAccess().getProcedureDefParserRuleCall()); 
                
            pushFollow(FOLLOW_ruleProcedureDef_in_ruleDefinition222);
            this_ProcedureDef_0=ruleProcedureDef();

            state._fsp--;

             
                    current = this_ProcedureDef_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDefinition"


    // $ANTLR start "entryRuleProcedureDef"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:136:1: entryRuleProcedureDef returns [EObject current=null] : iv_ruleProcedureDef= ruleProcedureDef EOF ;
    public final EObject entryRuleProcedureDef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProcedureDef = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:137:2: (iv_ruleProcedureDef= ruleProcedureDef EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:138:2: iv_ruleProcedureDef= ruleProcedureDef EOF
            {
             newCompositeNode(grammarAccess.getProcedureDefRule()); 
            pushFollow(FOLLOW_ruleProcedureDef_in_entryRuleProcedureDef256);
            iv_ruleProcedureDef=ruleProcedureDef();

            state._fsp--;

             current =iv_ruleProcedureDef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleProcedureDef266); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleProcedureDef"


    // $ANTLR start "ruleProcedureDef"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:145:1: ruleProcedureDef returns [EObject current=null] : (otherlv_0= 'procedure' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' )? (otherlv_3= ')' )? otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' ) ;
    public final EObject ruleProcedureDef() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_commands_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:148:28: ( (otherlv_0= 'procedure' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' )? (otherlv_3= ')' )? otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:149:1: (otherlv_0= 'procedure' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' )? (otherlv_3= ')' )? otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:149:1: (otherlv_0= 'procedure' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' )? (otherlv_3= ')' )? otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:149:3: otherlv_0= 'procedure' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '(' )? (otherlv_3= ')' )? otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}'
            {
            otherlv_0=(Token)match(input,11,FOLLOW_11_in_ruleProcedureDef303); 

                	newLeafNode(otherlv_0, grammarAccess.getProcedureDefAccess().getProcedureKeyword_0());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:153:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:154:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:154:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:155:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleProcedureDef320); 

            			newLeafNode(lv_name_1_0, grammarAccess.getProcedureDefAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getProcedureDefRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:171:2: (otherlv_2= '(' )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==12) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:171:4: otherlv_2= '('
                    {
                    otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleProcedureDef338); 

                        	newLeafNode(otherlv_2, grammarAccess.getProcedureDefAccess().getLeftParenthesisKeyword_2());
                        

                    }
                    break;

            }

            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:175:3: (otherlv_3= ')' )?
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==13) ) {
                alt3=1;
            }
            switch (alt3) {
                case 1 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:175:5: otherlv_3= ')'
                    {
                    otherlv_3=(Token)match(input,13,FOLLOW_13_in_ruleProcedureDef353); 

                        	newLeafNode(otherlv_3, grammarAccess.getProcedureDefAccess().getRightParenthesisKeyword_3());
                        

                    }
                    break;

            }

            otherlv_4=(Token)match(input,14,FOLLOW_14_in_ruleProcedureDef367); 

                	newLeafNode(otherlv_4, grammarAccess.getProcedureDefAccess().getLeftCurlyBracketKeyword_4());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:183:1: ( (lv_commands_5_0= ruleCommands ) )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( ((LA4_0>=17 && LA4_0<=19)) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:184:1: (lv_commands_5_0= ruleCommands )
            	    {
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:184:1: (lv_commands_5_0= ruleCommands )
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:185:3: lv_commands_5_0= ruleCommands
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getProcedureDefAccess().getCommandsCommandsParserRuleCall_5_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleCommands_in_ruleProcedureDef388);
            	    lv_commands_5_0=ruleCommands();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getProcedureDefRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"commands",
            	            		lv_commands_5_0, 
            	            		"Commands");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop4;
                }
            } while (true);

            otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleProcedureDef401); 

                	newLeafNode(otherlv_6, grammarAccess.getProcedureDefAccess().getRightCurlyBracketKeyword_6());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleProcedureDef"


    // $ANTLR start "entryRuleCondition"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:213:1: entryRuleCondition returns [EObject current=null] : iv_ruleCondition= ruleCondition EOF ;
    public final EObject entryRuleCondition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCondition = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:214:2: (iv_ruleCondition= ruleCondition EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:215:2: iv_ruleCondition= ruleCondition EOF
            {
             newCompositeNode(grammarAccess.getConditionRule()); 
            pushFollow(FOLLOW_ruleCondition_in_entryRuleCondition437);
            iv_ruleCondition=ruleCondition();

            state._fsp--;

             current =iv_ruleCondition; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleCondition447); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCondition"


    // $ANTLR start "ruleCondition"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:222:1: ruleCondition returns [EObject current=null] : this_HayBolitas_0= ruleHayBolitas ;
    public final EObject ruleCondition() throws RecognitionException {
        EObject current = null;

        EObject this_HayBolitas_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:225:28: (this_HayBolitas_0= ruleHayBolitas )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:227:5: this_HayBolitas_0= ruleHayBolitas
            {
             
                    newCompositeNode(grammarAccess.getConditionAccess().getHayBolitasParserRuleCall()); 
                
            pushFollow(FOLLOW_ruleHayBolitas_in_ruleCondition493);
            this_HayBolitas_0=ruleHayBolitas();

            state._fsp--;

             
                    current = this_HayBolitas_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCondition"


    // $ANTLR start "entryRuleHayBolitas"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:243:1: entryRuleHayBolitas returns [EObject current=null] : iv_ruleHayBolitas= ruleHayBolitas EOF ;
    public final EObject entryRuleHayBolitas() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleHayBolitas = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:244:2: (iv_ruleHayBolitas= ruleHayBolitas EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:245:2: iv_ruleHayBolitas= ruleHayBolitas EOF
            {
             newCompositeNode(grammarAccess.getHayBolitasRule()); 
            pushFollow(FOLLOW_ruleHayBolitas_in_entryRuleHayBolitas527);
            iv_ruleHayBolitas=ruleHayBolitas();

            state._fsp--;

             current =iv_ruleHayBolitas; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleHayBolitas537); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleHayBolitas"


    // $ANTLR start "ruleHayBolitas"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:252:1: ruleHayBolitas returns [EObject current=null] : ( ( (lv_name_0_0= 'hayBolitas' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' ) ;
    public final EObject ruleHayBolitas() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_type_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:255:28: ( ( ( (lv_name_0_0= 'hayBolitas' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:256:1: ( ( (lv_name_0_0= 'hayBolitas' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:256:1: ( ( (lv_name_0_0= 'hayBolitas' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:256:2: ( (lv_name_0_0= 'hayBolitas' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')'
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:256:2: ( (lv_name_0_0= 'hayBolitas' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:257:1: (lv_name_0_0= 'hayBolitas' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:257:1: (lv_name_0_0= 'hayBolitas' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:258:3: lv_name_0_0= 'hayBolitas'
            {
            lv_name_0_0=(Token)match(input,16,FOLLOW_16_in_ruleHayBolitas580); 

                    newLeafNode(lv_name_0_0, grammarAccess.getHayBolitasAccess().getNameHayBolitasKeyword_0_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getHayBolitasRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "hayBolitas");
            	    

            }


            }

            otherlv_1=(Token)match(input,12,FOLLOW_12_in_ruleHayBolitas605); 

                	newLeafNode(otherlv_1, grammarAccess.getHayBolitasAccess().getLeftParenthesisKeyword_1());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:275:1: ( (lv_type_2_0= ruleTypeColor ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:276:1: (lv_type_2_0= ruleTypeColor )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:276:1: (lv_type_2_0= ruleTypeColor )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:277:3: lv_type_2_0= ruleTypeColor
            {
             
            	        newCompositeNode(grammarAccess.getHayBolitasAccess().getTypeTypeColorParserRuleCall_2_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeColor_in_ruleHayBolitas626);
            lv_type_2_0=ruleTypeColor();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getHayBolitasRule());
            	        }
                   		set(
                   			current, 
                   			"type",
                    		lv_type_2_0, 
                    		"TypeColor");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_3=(Token)match(input,13,FOLLOW_13_in_ruleHayBolitas638); 

                	newLeafNode(otherlv_3, grammarAccess.getHayBolitasAccess().getRightParenthesisKeyword_3());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleHayBolitas"


    // $ANTLR start "entryRuleCommands"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:305:1: entryRuleCommands returns [EObject current=null] : iv_ruleCommands= ruleCommands EOF ;
    public final EObject entryRuleCommands() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCommands = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:306:2: (iv_ruleCommands= ruleCommands EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:307:2: iv_ruleCommands= ruleCommands EOF
            {
             newCompositeNode(grammarAccess.getCommandsRule()); 
            pushFollow(FOLLOW_ruleCommands_in_entryRuleCommands674);
            iv_ruleCommands=ruleCommands();

            state._fsp--;

             current =iv_ruleCommands; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleCommands684); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCommands"


    // $ANTLR start "ruleCommands"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:314:1: ruleCommands returns [EObject current=null] : (this_Put_0= rulePut | this_Move_1= ruleMove | this_IfElse_2= ruleIfElse ) ;
    public final EObject ruleCommands() throws RecognitionException {
        EObject current = null;

        EObject this_Put_0 = null;

        EObject this_Move_1 = null;

        EObject this_IfElse_2 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:317:28: ( (this_Put_0= rulePut | this_Move_1= ruleMove | this_IfElse_2= ruleIfElse ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:318:1: (this_Put_0= rulePut | this_Move_1= ruleMove | this_IfElse_2= ruleIfElse )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:318:1: (this_Put_0= rulePut | this_Move_1= ruleMove | this_IfElse_2= ruleIfElse )
            int alt5=3;
            switch ( input.LA(1) ) {
            case 17:
                {
                alt5=1;
                }
                break;
            case 18:
                {
                alt5=2;
                }
                break;
            case 19:
                {
                alt5=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }

            switch (alt5) {
                case 1 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:319:5: this_Put_0= rulePut
                    {
                     
                            newCompositeNode(grammarAccess.getCommandsAccess().getPutParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_rulePut_in_ruleCommands731);
                    this_Put_0=rulePut();

                    state._fsp--;

                     
                            current = this_Put_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:329:5: this_Move_1= ruleMove
                    {
                     
                            newCompositeNode(grammarAccess.getCommandsAccess().getMoveParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleMove_in_ruleCommands758);
                    this_Move_1=ruleMove();

                    state._fsp--;

                     
                            current = this_Move_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:339:5: this_IfElse_2= ruleIfElse
                    {
                     
                            newCompositeNode(grammarAccess.getCommandsAccess().getIfElseParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleIfElse_in_ruleCommands785);
                    this_IfElse_2=ruleIfElse();

                    state._fsp--;

                     
                            current = this_IfElse_2; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCommands"


    // $ANTLR start "entryRulePut"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:355:1: entryRulePut returns [EObject current=null] : iv_rulePut= rulePut EOF ;
    public final EObject entryRulePut() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePut = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:356:2: (iv_rulePut= rulePut EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:357:2: iv_rulePut= rulePut EOF
            {
             newCompositeNode(grammarAccess.getPutRule()); 
            pushFollow(FOLLOW_rulePut_in_entryRulePut820);
            iv_rulePut=rulePut();

            state._fsp--;

             current =iv_rulePut; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePut830); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePut"


    // $ANTLR start "rulePut"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:364:1: rulePut returns [EObject current=null] : ( ( (lv_name_0_0= 'Poner' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' ) ;
    public final EObject rulePut() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_type_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:367:28: ( ( ( (lv_name_0_0= 'Poner' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:368:1: ( ( (lv_name_0_0= 'Poner' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:368:1: ( ( (lv_name_0_0= 'Poner' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:368:2: ( (lv_name_0_0= 'Poner' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeColor ) ) otherlv_3= ')'
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:368:2: ( (lv_name_0_0= 'Poner' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:369:1: (lv_name_0_0= 'Poner' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:369:1: (lv_name_0_0= 'Poner' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:370:3: lv_name_0_0= 'Poner'
            {
            lv_name_0_0=(Token)match(input,17,FOLLOW_17_in_rulePut873); 

                    newLeafNode(lv_name_0_0, grammarAccess.getPutAccess().getNamePonerKeyword_0_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPutRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Poner");
            	    

            }


            }

            otherlv_1=(Token)match(input,12,FOLLOW_12_in_rulePut898); 

                	newLeafNode(otherlv_1, grammarAccess.getPutAccess().getLeftParenthesisKeyword_1());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:387:1: ( (lv_type_2_0= ruleTypeColor ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:388:1: (lv_type_2_0= ruleTypeColor )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:388:1: (lv_type_2_0= ruleTypeColor )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:389:3: lv_type_2_0= ruleTypeColor
            {
             
            	        newCompositeNode(grammarAccess.getPutAccess().getTypeTypeColorParserRuleCall_2_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeColor_in_rulePut919);
            lv_type_2_0=ruleTypeColor();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getPutRule());
            	        }
                   		set(
                   			current, 
                   			"type",
                    		lv_type_2_0, 
                    		"TypeColor");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_3=(Token)match(input,13,FOLLOW_13_in_rulePut931); 

                	newLeafNode(otherlv_3, grammarAccess.getPutAccess().getRightParenthesisKeyword_3());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePut"


    // $ANTLR start "entryRuleMove"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:417:1: entryRuleMove returns [EObject current=null] : iv_ruleMove= ruleMove EOF ;
    public final EObject entryRuleMove() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMove = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:418:2: (iv_ruleMove= ruleMove EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:419:2: iv_ruleMove= ruleMove EOF
            {
             newCompositeNode(grammarAccess.getMoveRule()); 
            pushFollow(FOLLOW_ruleMove_in_entryRuleMove967);
            iv_ruleMove=ruleMove();

            state._fsp--;

             current =iv_ruleMove; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMove977); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMove"


    // $ANTLR start "ruleMove"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:426:1: ruleMove returns [EObject current=null] : ( ( (lv_name_0_0= 'Mover' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeMovement ) ) otherlv_3= ')' ) ;
    public final EObject ruleMove() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_type_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:429:28: ( ( ( (lv_name_0_0= 'Mover' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeMovement ) ) otherlv_3= ')' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:430:1: ( ( (lv_name_0_0= 'Mover' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeMovement ) ) otherlv_3= ')' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:430:1: ( ( (lv_name_0_0= 'Mover' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeMovement ) ) otherlv_3= ')' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:430:2: ( (lv_name_0_0= 'Mover' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleTypeMovement ) ) otherlv_3= ')'
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:430:2: ( (lv_name_0_0= 'Mover' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:431:1: (lv_name_0_0= 'Mover' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:431:1: (lv_name_0_0= 'Mover' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:432:3: lv_name_0_0= 'Mover'
            {
            lv_name_0_0=(Token)match(input,18,FOLLOW_18_in_ruleMove1020); 

                    newLeafNode(lv_name_0_0, grammarAccess.getMoveAccess().getNameMoverKeyword_0_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMoveRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Mover");
            	    

            }


            }

            otherlv_1=(Token)match(input,12,FOLLOW_12_in_ruleMove1045); 

                	newLeafNode(otherlv_1, grammarAccess.getMoveAccess().getLeftParenthesisKeyword_1());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:449:1: ( (lv_type_2_0= ruleTypeMovement ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:450:1: (lv_type_2_0= ruleTypeMovement )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:450:1: (lv_type_2_0= ruleTypeMovement )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:451:3: lv_type_2_0= ruleTypeMovement
            {
             
            	        newCompositeNode(grammarAccess.getMoveAccess().getTypeTypeMovementParserRuleCall_2_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeMovement_in_ruleMove1066);
            lv_type_2_0=ruleTypeMovement();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getMoveRule());
            	        }
                   		set(
                   			current, 
                   			"type",
                    		lv_type_2_0, 
                    		"TypeMovement");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_3=(Token)match(input,13,FOLLOW_13_in_ruleMove1078); 

                	newLeafNode(otherlv_3, grammarAccess.getMoveAccess().getRightParenthesisKeyword_3());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMove"


    // $ANTLR start "entryRuleIfElse"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:479:1: entryRuleIfElse returns [EObject current=null] : iv_ruleIfElse= ruleIfElse EOF ;
    public final EObject entryRuleIfElse() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleIfElse = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:480:2: (iv_ruleIfElse= ruleIfElse EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:481:2: iv_ruleIfElse= ruleIfElse EOF
            {
             newCompositeNode(grammarAccess.getIfElseRule()); 
            pushFollow(FOLLOW_ruleIfElse_in_entryRuleIfElse1114);
            iv_ruleIfElse=ruleIfElse();

            state._fsp--;

             current =iv_ruleIfElse; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleIfElse1124); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIfElse"


    // $ANTLR start "ruleIfElse"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:488:1: ruleIfElse returns [EObject current=null] : ( ( (lv_name_0_0= 'if' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleCondition ) ) otherlv_3= ')' otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' otherlv_7= 'else' otherlv_8= '{' ( (lv_commands_9_0= ruleCommands ) )* otherlv_10= '}' ) ;
    public final EObject ruleIfElse() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        EObject lv_type_2_0 = null;

        EObject lv_commands_5_0 = null;

        EObject lv_commands_9_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:491:28: ( ( ( (lv_name_0_0= 'if' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleCondition ) ) otherlv_3= ')' otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' otherlv_7= 'else' otherlv_8= '{' ( (lv_commands_9_0= ruleCommands ) )* otherlv_10= '}' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:492:1: ( ( (lv_name_0_0= 'if' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleCondition ) ) otherlv_3= ')' otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' otherlv_7= 'else' otherlv_8= '{' ( (lv_commands_9_0= ruleCommands ) )* otherlv_10= '}' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:492:1: ( ( (lv_name_0_0= 'if' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleCondition ) ) otherlv_3= ')' otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' otherlv_7= 'else' otherlv_8= '{' ( (lv_commands_9_0= ruleCommands ) )* otherlv_10= '}' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:492:2: ( (lv_name_0_0= 'if' ) ) otherlv_1= '(' ( (lv_type_2_0= ruleCondition ) ) otherlv_3= ')' otherlv_4= '{' ( (lv_commands_5_0= ruleCommands ) )* otherlv_6= '}' otherlv_7= 'else' otherlv_8= '{' ( (lv_commands_9_0= ruleCommands ) )* otherlv_10= '}'
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:492:2: ( (lv_name_0_0= 'if' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:493:1: (lv_name_0_0= 'if' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:493:1: (lv_name_0_0= 'if' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:494:3: lv_name_0_0= 'if'
            {
            lv_name_0_0=(Token)match(input,19,FOLLOW_19_in_ruleIfElse1167); 

                    newLeafNode(lv_name_0_0, grammarAccess.getIfElseAccess().getNameIfKeyword_0_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getIfElseRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "if");
            	    

            }


            }

            otherlv_1=(Token)match(input,12,FOLLOW_12_in_ruleIfElse1192); 

                	newLeafNode(otherlv_1, grammarAccess.getIfElseAccess().getLeftParenthesisKeyword_1());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:511:1: ( (lv_type_2_0= ruleCondition ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:512:1: (lv_type_2_0= ruleCondition )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:512:1: (lv_type_2_0= ruleCondition )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:513:3: lv_type_2_0= ruleCondition
            {
             
            	        newCompositeNode(grammarAccess.getIfElseAccess().getTypeConditionParserRuleCall_2_0()); 
            	    
            pushFollow(FOLLOW_ruleCondition_in_ruleIfElse1213);
            lv_type_2_0=ruleCondition();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getIfElseRule());
            	        }
                   		set(
                   			current, 
                   			"type",
                    		lv_type_2_0, 
                    		"Condition");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_3=(Token)match(input,13,FOLLOW_13_in_ruleIfElse1225); 

                	newLeafNode(otherlv_3, grammarAccess.getIfElseAccess().getRightParenthesisKeyword_3());
                
            otherlv_4=(Token)match(input,14,FOLLOW_14_in_ruleIfElse1237); 

                	newLeafNode(otherlv_4, grammarAccess.getIfElseAccess().getLeftCurlyBracketKeyword_4());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:537:1: ( (lv_commands_5_0= ruleCommands ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( ((LA6_0>=17 && LA6_0<=19)) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:538:1: (lv_commands_5_0= ruleCommands )
            	    {
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:538:1: (lv_commands_5_0= ruleCommands )
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:539:3: lv_commands_5_0= ruleCommands
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getIfElseAccess().getCommandsCommandsParserRuleCall_5_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleCommands_in_ruleIfElse1258);
            	    lv_commands_5_0=ruleCommands();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getIfElseRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"commands",
            	            		lv_commands_5_0, 
            	            		"Commands");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

            otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleIfElse1271); 

                	newLeafNode(otherlv_6, grammarAccess.getIfElseAccess().getRightCurlyBracketKeyword_6());
                
            otherlv_7=(Token)match(input,20,FOLLOW_20_in_ruleIfElse1283); 

                	newLeafNode(otherlv_7, grammarAccess.getIfElseAccess().getElseKeyword_7());
                
            otherlv_8=(Token)match(input,14,FOLLOW_14_in_ruleIfElse1295); 

                	newLeafNode(otherlv_8, grammarAccess.getIfElseAccess().getLeftCurlyBracketKeyword_8());
                
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:567:1: ( (lv_commands_9_0= ruleCommands ) )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( ((LA7_0>=17 && LA7_0<=19)) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:568:1: (lv_commands_9_0= ruleCommands )
            	    {
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:568:1: (lv_commands_9_0= ruleCommands )
            	    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:569:3: lv_commands_9_0= ruleCommands
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getIfElseAccess().getCommandsCommandsParserRuleCall_9_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleCommands_in_ruleIfElse1316);
            	    lv_commands_9_0=ruleCommands();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getIfElseRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"commands",
            	            		lv_commands_9_0, 
            	            		"Commands");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);

            otherlv_10=(Token)match(input,15,FOLLOW_15_in_ruleIfElse1329); 

                	newLeafNode(otherlv_10, grammarAccess.getIfElseAccess().getRightCurlyBracketKeyword_10());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIfElse"


    // $ANTLR start "entryRuleTypeMovement"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:597:1: entryRuleTypeMovement returns [EObject current=null] : iv_ruleTypeMovement= ruleTypeMovement EOF ;
    public final EObject entryRuleTypeMovement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeMovement = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:598:2: (iv_ruleTypeMovement= ruleTypeMovement EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:599:2: iv_ruleTypeMovement= ruleTypeMovement EOF
            {
             newCompositeNode(grammarAccess.getTypeMovementRule()); 
            pushFollow(FOLLOW_ruleTypeMovement_in_entryRuleTypeMovement1365);
            iv_ruleTypeMovement=ruleTypeMovement();

            state._fsp--;

             current =iv_ruleTypeMovement; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeMovement1375); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTypeMovement"


    // $ANTLR start "ruleTypeMovement"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:606:1: ruleTypeMovement returns [EObject current=null] : (this_South_0= ruleSouth | this_North_1= ruleNorth | this_East_2= ruleEast | this_West_3= ruleWest ) ;
    public final EObject ruleTypeMovement() throws RecognitionException {
        EObject current = null;

        EObject this_South_0 = null;

        EObject this_North_1 = null;

        EObject this_East_2 = null;

        EObject this_West_3 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:609:28: ( (this_South_0= ruleSouth | this_North_1= ruleNorth | this_East_2= ruleEast | this_West_3= ruleWest ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:610:1: (this_South_0= ruleSouth | this_North_1= ruleNorth | this_East_2= ruleEast | this_West_3= ruleWest )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:610:1: (this_South_0= ruleSouth | this_North_1= ruleNorth | this_East_2= ruleEast | this_West_3= ruleWest )
            int alt8=4;
            switch ( input.LA(1) ) {
            case 24:
                {
                alt8=1;
                }
                break;
            case 23:
                {
                alt8=2;
                }
                break;
            case 22:
                {
                alt8=3;
                }
                break;
            case 21:
                {
                alt8=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;
            }

            switch (alt8) {
                case 1 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:611:5: this_South_0= ruleSouth
                    {
                     
                            newCompositeNode(grammarAccess.getTypeMovementAccess().getSouthParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleSouth_in_ruleTypeMovement1422);
                    this_South_0=ruleSouth();

                    state._fsp--;

                     
                            current = this_South_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:621:5: this_North_1= ruleNorth
                    {
                     
                            newCompositeNode(grammarAccess.getTypeMovementAccess().getNorthParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleNorth_in_ruleTypeMovement1449);
                    this_North_1=ruleNorth();

                    state._fsp--;

                     
                            current = this_North_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:631:5: this_East_2= ruleEast
                    {
                     
                            newCompositeNode(grammarAccess.getTypeMovementAccess().getEastParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleEast_in_ruleTypeMovement1476);
                    this_East_2=ruleEast();

                    state._fsp--;

                     
                            current = this_East_2; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 4 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:641:5: this_West_3= ruleWest
                    {
                     
                            newCompositeNode(grammarAccess.getTypeMovementAccess().getWestParserRuleCall_3()); 
                        
                    pushFollow(FOLLOW_ruleWest_in_ruleTypeMovement1503);
                    this_West_3=ruleWest();

                    state._fsp--;

                     
                            current = this_West_3; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTypeMovement"


    // $ANTLR start "entryRuleWest"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:657:1: entryRuleWest returns [EObject current=null] : iv_ruleWest= ruleWest EOF ;
    public final EObject entryRuleWest() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleWest = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:658:2: (iv_ruleWest= ruleWest EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:659:2: iv_ruleWest= ruleWest EOF
            {
             newCompositeNode(grammarAccess.getWestRule()); 
            pushFollow(FOLLOW_ruleWest_in_entryRuleWest1538);
            iv_ruleWest=ruleWest();

            state._fsp--;

             current =iv_ruleWest; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleWest1548); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleWest"


    // $ANTLR start "ruleWest"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:666:1: ruleWest returns [EObject current=null] : ( (lv_name_0_0= 'Oeste' ) ) ;
    public final EObject ruleWest() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:669:28: ( ( (lv_name_0_0= 'Oeste' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:670:1: ( (lv_name_0_0= 'Oeste' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:670:1: ( (lv_name_0_0= 'Oeste' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:671:1: (lv_name_0_0= 'Oeste' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:671:1: (lv_name_0_0= 'Oeste' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:672:3: lv_name_0_0= 'Oeste'
            {
            lv_name_0_0=(Token)match(input,21,FOLLOW_21_in_ruleWest1590); 

                    newLeafNode(lv_name_0_0, grammarAccess.getWestAccess().getNameOesteKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getWestRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Oeste");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleWest"


    // $ANTLR start "entryRuleEast"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:693:1: entryRuleEast returns [EObject current=null] : iv_ruleEast= ruleEast EOF ;
    public final EObject entryRuleEast() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEast = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:694:2: (iv_ruleEast= ruleEast EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:695:2: iv_ruleEast= ruleEast EOF
            {
             newCompositeNode(grammarAccess.getEastRule()); 
            pushFollow(FOLLOW_ruleEast_in_entryRuleEast1638);
            iv_ruleEast=ruleEast();

            state._fsp--;

             current =iv_ruleEast; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleEast1648); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEast"


    // $ANTLR start "ruleEast"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:702:1: ruleEast returns [EObject current=null] : ( (lv_name_0_0= 'Este' ) ) ;
    public final EObject ruleEast() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:705:28: ( ( (lv_name_0_0= 'Este' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:706:1: ( (lv_name_0_0= 'Este' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:706:1: ( (lv_name_0_0= 'Este' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:707:1: (lv_name_0_0= 'Este' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:707:1: (lv_name_0_0= 'Este' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:708:3: lv_name_0_0= 'Este'
            {
            lv_name_0_0=(Token)match(input,22,FOLLOW_22_in_ruleEast1690); 

                    newLeafNode(lv_name_0_0, grammarAccess.getEastAccess().getNameEsteKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getEastRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Este");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEast"


    // $ANTLR start "entryRuleNorth"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:729:1: entryRuleNorth returns [EObject current=null] : iv_ruleNorth= ruleNorth EOF ;
    public final EObject entryRuleNorth() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNorth = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:730:2: (iv_ruleNorth= ruleNorth EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:731:2: iv_ruleNorth= ruleNorth EOF
            {
             newCompositeNode(grammarAccess.getNorthRule()); 
            pushFollow(FOLLOW_ruleNorth_in_entryRuleNorth1738);
            iv_ruleNorth=ruleNorth();

            state._fsp--;

             current =iv_ruleNorth; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleNorth1748); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNorth"


    // $ANTLR start "ruleNorth"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:738:1: ruleNorth returns [EObject current=null] : ( (lv_name_0_0= 'Norte' ) ) ;
    public final EObject ruleNorth() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:741:28: ( ( (lv_name_0_0= 'Norte' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:742:1: ( (lv_name_0_0= 'Norte' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:742:1: ( (lv_name_0_0= 'Norte' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:743:1: (lv_name_0_0= 'Norte' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:743:1: (lv_name_0_0= 'Norte' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:744:3: lv_name_0_0= 'Norte'
            {
            lv_name_0_0=(Token)match(input,23,FOLLOW_23_in_ruleNorth1790); 

                    newLeafNode(lv_name_0_0, grammarAccess.getNorthAccess().getNameNorteKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getNorthRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Norte");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNorth"


    // $ANTLR start "entryRuleSouth"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:765:1: entryRuleSouth returns [EObject current=null] : iv_ruleSouth= ruleSouth EOF ;
    public final EObject entryRuleSouth() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSouth = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:766:2: (iv_ruleSouth= ruleSouth EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:767:2: iv_ruleSouth= ruleSouth EOF
            {
             newCompositeNode(grammarAccess.getSouthRule()); 
            pushFollow(FOLLOW_ruleSouth_in_entryRuleSouth1838);
            iv_ruleSouth=ruleSouth();

            state._fsp--;

             current =iv_ruleSouth; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSouth1848); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSouth"


    // $ANTLR start "ruleSouth"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:774:1: ruleSouth returns [EObject current=null] : ( (lv_name_0_0= 'Sur' ) ) ;
    public final EObject ruleSouth() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:777:28: ( ( (lv_name_0_0= 'Sur' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:778:1: ( (lv_name_0_0= 'Sur' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:778:1: ( (lv_name_0_0= 'Sur' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:779:1: (lv_name_0_0= 'Sur' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:779:1: (lv_name_0_0= 'Sur' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:780:3: lv_name_0_0= 'Sur'
            {
            lv_name_0_0=(Token)match(input,24,FOLLOW_24_in_ruleSouth1890); 

                    newLeafNode(lv_name_0_0, grammarAccess.getSouthAccess().getNameSurKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getSouthRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Sur");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSouth"


    // $ANTLR start "entryRuleTypeColor"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:801:1: entryRuleTypeColor returns [EObject current=null] : iv_ruleTypeColor= ruleTypeColor EOF ;
    public final EObject entryRuleTypeColor() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeColor = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:802:2: (iv_ruleTypeColor= ruleTypeColor EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:803:2: iv_ruleTypeColor= ruleTypeColor EOF
            {
             newCompositeNode(grammarAccess.getTypeColorRule()); 
            pushFollow(FOLLOW_ruleTypeColor_in_entryRuleTypeColor1938);
            iv_ruleTypeColor=ruleTypeColor();

            state._fsp--;

             current =iv_ruleTypeColor; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeColor1948); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTypeColor"


    // $ANTLR start "ruleTypeColor"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:810:1: ruleTypeColor returns [EObject current=null] : (this_Green_0= ruleGreen | this_Blue_1= ruleBlue | this_Red_2= ruleRed | this_Black_3= ruleBlack ) ;
    public final EObject ruleTypeColor() throws RecognitionException {
        EObject current = null;

        EObject this_Green_0 = null;

        EObject this_Blue_1 = null;

        EObject this_Red_2 = null;

        EObject this_Black_3 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:813:28: ( (this_Green_0= ruleGreen | this_Blue_1= ruleBlue | this_Red_2= ruleRed | this_Black_3= ruleBlack ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:814:1: (this_Green_0= ruleGreen | this_Blue_1= ruleBlue | this_Red_2= ruleRed | this_Black_3= ruleBlack )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:814:1: (this_Green_0= ruleGreen | this_Blue_1= ruleBlue | this_Red_2= ruleRed | this_Black_3= ruleBlack )
            int alt9=4;
            switch ( input.LA(1) ) {
            case 28:
                {
                alt9=1;
                }
                break;
            case 27:
                {
                alt9=2;
                }
                break;
            case 26:
                {
                alt9=3;
                }
                break;
            case 25:
                {
                alt9=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }

            switch (alt9) {
                case 1 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:815:5: this_Green_0= ruleGreen
                    {
                     
                            newCompositeNode(grammarAccess.getTypeColorAccess().getGreenParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleGreen_in_ruleTypeColor1995);
                    this_Green_0=ruleGreen();

                    state._fsp--;

                     
                            current = this_Green_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:825:5: this_Blue_1= ruleBlue
                    {
                     
                            newCompositeNode(grammarAccess.getTypeColorAccess().getBlueParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleBlue_in_ruleTypeColor2022);
                    this_Blue_1=ruleBlue();

                    state._fsp--;

                     
                            current = this_Blue_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:835:5: this_Red_2= ruleRed
                    {
                     
                            newCompositeNode(grammarAccess.getTypeColorAccess().getRedParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleRed_in_ruleTypeColor2049);
                    this_Red_2=ruleRed();

                    state._fsp--;

                     
                            current = this_Red_2; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 4 :
                    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:845:5: this_Black_3= ruleBlack
                    {
                     
                            newCompositeNode(grammarAccess.getTypeColorAccess().getBlackParserRuleCall_3()); 
                        
                    pushFollow(FOLLOW_ruleBlack_in_ruleTypeColor2076);
                    this_Black_3=ruleBlack();

                    state._fsp--;

                     
                            current = this_Black_3; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTypeColor"


    // $ANTLR start "entryRuleBlack"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:861:1: entryRuleBlack returns [EObject current=null] : iv_ruleBlack= ruleBlack EOF ;
    public final EObject entryRuleBlack() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBlack = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:862:2: (iv_ruleBlack= ruleBlack EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:863:2: iv_ruleBlack= ruleBlack EOF
            {
             newCompositeNode(grammarAccess.getBlackRule()); 
            pushFollow(FOLLOW_ruleBlack_in_entryRuleBlack2111);
            iv_ruleBlack=ruleBlack();

            state._fsp--;

             current =iv_ruleBlack; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBlack2121); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBlack"


    // $ANTLR start "ruleBlack"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:870:1: ruleBlack returns [EObject current=null] : ( (lv_name_0_0= 'Negro' ) ) ;
    public final EObject ruleBlack() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:873:28: ( ( (lv_name_0_0= 'Negro' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:874:1: ( (lv_name_0_0= 'Negro' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:874:1: ( (lv_name_0_0= 'Negro' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:875:1: (lv_name_0_0= 'Negro' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:875:1: (lv_name_0_0= 'Negro' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:876:3: lv_name_0_0= 'Negro'
            {
            lv_name_0_0=(Token)match(input,25,FOLLOW_25_in_ruleBlack2163); 

                    newLeafNode(lv_name_0_0, grammarAccess.getBlackAccess().getNameNegroKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getBlackRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Negro");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBlack"


    // $ANTLR start "entryRuleRed"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:897:1: entryRuleRed returns [EObject current=null] : iv_ruleRed= ruleRed EOF ;
    public final EObject entryRuleRed() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRed = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:898:2: (iv_ruleRed= ruleRed EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:899:2: iv_ruleRed= ruleRed EOF
            {
             newCompositeNode(grammarAccess.getRedRule()); 
            pushFollow(FOLLOW_ruleRed_in_entryRuleRed2211);
            iv_ruleRed=ruleRed();

            state._fsp--;

             current =iv_ruleRed; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRed2221); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRed"


    // $ANTLR start "ruleRed"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:906:1: ruleRed returns [EObject current=null] : ( (lv_name_0_0= 'Rojo' ) ) ;
    public final EObject ruleRed() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:909:28: ( ( (lv_name_0_0= 'Rojo' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:910:1: ( (lv_name_0_0= 'Rojo' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:910:1: ( (lv_name_0_0= 'Rojo' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:911:1: (lv_name_0_0= 'Rojo' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:911:1: (lv_name_0_0= 'Rojo' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:912:3: lv_name_0_0= 'Rojo'
            {
            lv_name_0_0=(Token)match(input,26,FOLLOW_26_in_ruleRed2263); 

                    newLeafNode(lv_name_0_0, grammarAccess.getRedAccess().getNameRojoKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getRedRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Rojo");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRed"


    // $ANTLR start "entryRuleBlue"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:933:1: entryRuleBlue returns [EObject current=null] : iv_ruleBlue= ruleBlue EOF ;
    public final EObject entryRuleBlue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBlue = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:934:2: (iv_ruleBlue= ruleBlue EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:935:2: iv_ruleBlue= ruleBlue EOF
            {
             newCompositeNode(grammarAccess.getBlueRule()); 
            pushFollow(FOLLOW_ruleBlue_in_entryRuleBlue2311);
            iv_ruleBlue=ruleBlue();

            state._fsp--;

             current =iv_ruleBlue; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBlue2321); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBlue"


    // $ANTLR start "ruleBlue"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:942:1: ruleBlue returns [EObject current=null] : ( (lv_name_0_0= 'Azul' ) ) ;
    public final EObject ruleBlue() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:945:28: ( ( (lv_name_0_0= 'Azul' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:946:1: ( (lv_name_0_0= 'Azul' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:946:1: ( (lv_name_0_0= 'Azul' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:947:1: (lv_name_0_0= 'Azul' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:947:1: (lv_name_0_0= 'Azul' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:948:3: lv_name_0_0= 'Azul'
            {
            lv_name_0_0=(Token)match(input,27,FOLLOW_27_in_ruleBlue2363); 

                    newLeafNode(lv_name_0_0, grammarAccess.getBlueAccess().getNameAzulKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getBlueRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Azul");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBlue"


    // $ANTLR start "entryRuleGreen"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:969:1: entryRuleGreen returns [EObject current=null] : iv_ruleGreen= ruleGreen EOF ;
    public final EObject entryRuleGreen() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGreen = null;


        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:970:2: (iv_ruleGreen= ruleGreen EOF )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:971:2: iv_ruleGreen= ruleGreen EOF
            {
             newCompositeNode(grammarAccess.getGreenRule()); 
            pushFollow(FOLLOW_ruleGreen_in_entryRuleGreen2411);
            iv_ruleGreen=ruleGreen();

            state._fsp--;

             current =iv_ruleGreen; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleGreen2421); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGreen"


    // $ANTLR start "ruleGreen"
    // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:978:1: ruleGreen returns [EObject current=null] : ( (lv_name_0_0= 'Verde' ) ) ;
    public final EObject ruleGreen() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:981:28: ( ( (lv_name_0_0= 'Verde' ) ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:982:1: ( (lv_name_0_0= 'Verde' ) )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:982:1: ( (lv_name_0_0= 'Verde' ) )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:983:1: (lv_name_0_0= 'Verde' )
            {
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:983:1: (lv_name_0_0= 'Verde' )
            // ../org.xtext.tp4.minigobstones/src-gen/org/xtext/tp4/parser/antlr/internal/InternalMinigobstones.g:984:3: lv_name_0_0= 'Verde'
            {
            lv_name_0_0=(Token)match(input,28,FOLLOW_28_in_ruleGreen2463); 

                    newLeafNode(lv_name_0_0, grammarAccess.getGreenAccess().getNameVerdeKeyword_0());
                

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getGreenRule());
            	        }
                   		setWithLastConsumed(current, "name", lv_name_0_0, "Verde");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGreen"

    // Delegated rules


 

    public static final BitSet FOLLOW_ruleInitStructure_in_entryRuleInitStructure75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInitStructure85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDefinition_in_ruleInitStructure130 = new BitSet(new long[]{0x0000000000000802L});
    public static final BitSet FOLLOW_ruleDefinition_in_entryRuleDefinition166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDefinition176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleProcedureDef_in_ruleDefinition222 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleProcedureDef_in_entryRuleProcedureDef256 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleProcedureDef266 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleProcedureDef303 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleProcedureDef320 = new BitSet(new long[]{0x0000000000007000L});
    public static final BitSet FOLLOW_12_in_ruleProcedureDef338 = new BitSet(new long[]{0x0000000000006000L});
    public static final BitSet FOLLOW_13_in_ruleProcedureDef353 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleProcedureDef367 = new BitSet(new long[]{0x00000000000E8000L});
    public static final BitSet FOLLOW_ruleCommands_in_ruleProcedureDef388 = new BitSet(new long[]{0x00000000000E8000L});
    public static final BitSet FOLLOW_15_in_ruleProcedureDef401 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCondition_in_entryRuleCondition437 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCondition447 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleHayBolitas_in_ruleCondition493 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleHayBolitas_in_entryRuleHayBolitas527 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleHayBolitas537 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_ruleHayBolitas580 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleHayBolitas605 = new BitSet(new long[]{0x000000001E000000L});
    public static final BitSet FOLLOW_ruleTypeColor_in_ruleHayBolitas626 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleHayBolitas638 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCommands_in_entryRuleCommands674 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCommands684 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePut_in_ruleCommands731 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMove_in_ruleCommands758 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIfElse_in_ruleCommands785 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePut_in_entryRulePut820 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePut830 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_17_in_rulePut873 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_rulePut898 = new BitSet(new long[]{0x000000001E000000L});
    public static final BitSet FOLLOW_ruleTypeColor_in_rulePut919 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_rulePut931 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMove_in_entryRuleMove967 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMove977 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_18_in_ruleMove1020 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleMove1045 = new BitSet(new long[]{0x0000000001E00000L});
    public static final BitSet FOLLOW_ruleTypeMovement_in_ruleMove1066 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleMove1078 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIfElse_in_entryRuleIfElse1114 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleIfElse1124 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleIfElse1167 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleIfElse1192 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_ruleCondition_in_ruleIfElse1213 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleIfElse1225 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleIfElse1237 = new BitSet(new long[]{0x00000000000E8000L});
    public static final BitSet FOLLOW_ruleCommands_in_ruleIfElse1258 = new BitSet(new long[]{0x00000000000E8000L});
    public static final BitSet FOLLOW_15_in_ruleIfElse1271 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleIfElse1283 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleIfElse1295 = new BitSet(new long[]{0x00000000000E8000L});
    public static final BitSet FOLLOW_ruleCommands_in_ruleIfElse1316 = new BitSet(new long[]{0x00000000000E8000L});
    public static final BitSet FOLLOW_15_in_ruleIfElse1329 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeMovement_in_entryRuleTypeMovement1365 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeMovement1375 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSouth_in_ruleTypeMovement1422 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNorth_in_ruleTypeMovement1449 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEast_in_ruleTypeMovement1476 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWest_in_ruleTypeMovement1503 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWest_in_entryRuleWest1538 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleWest1548 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleWest1590 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEast_in_entryRuleEast1638 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEast1648 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_ruleEast1690 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNorth_in_entryRuleNorth1738 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNorth1748 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_ruleNorth1790 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSouth_in_entryRuleSouth1838 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSouth1848 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_ruleSouth1890 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeColor_in_entryRuleTypeColor1938 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeColor1948 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGreen_in_ruleTypeColor1995 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlue_in_ruleTypeColor2022 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRed_in_ruleTypeColor2049 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlack_in_ruleTypeColor2076 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlack_in_entryRuleBlack2111 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBlack2121 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_ruleBlack2163 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRed_in_entryRuleRed2211 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRed2221 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_ruleRed2263 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlue_in_entryRuleBlue2311 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBlue2321 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_ruleBlue2363 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGreen_in_entryRuleGreen2411 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleGreen2421 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleGreen2463 = new BitSet(new long[]{0x0000000000000002L});

}